home *** CD-ROM | disk | FTP | other *** search
- ;;; -*- Mode:Lisp; Package:CLIO-OPEN; Base:10; Lowercase:T; Syntax:Common-Lisp -*-
-
-
- ;;;----------------------------------------------------------------------------------+
- ;;; |
- ;;; TEXAS INSTRUMENTS INCORPORATED |
- ;;; P.O. BOX 149149 |
- ;;; AUSTIN, TEXAS 78714-9149 |
- ;;; |
- ;;; Copyright (C) 1989, 1990 Texas Instruments Incorporated. |
- ;;; |
- ;;; Permission is granted to any individual or institution to use, copy, modify, and |
- ;;; distribute this software, provided that this complete copyright and permission |
- ;;; notice is maintained, intact, in all copies and supporting documentation. |
- ;;; |
- ;;; Texas Instruments Incorporated provides this software "as is" without express or |
- ;;; implied warranty. |
- ;;; |
- ;;;----------------------------------------------------------------------------------+
-
- (in-package "CLIO-OPEN")
-
- (export '(
- command-frame
- command-frame-content
- command-frame-controls
- make-command-frame
- )
- 'clio-open)
-
-
- (defcontact command-frame (core core-shell top-level-session)
- ()
- (:documentation "A top-level-session containing a content and a set of controls.")
- (:resources
- (content :type (or function list) :initform nil)
- (controls :type (or function list) :initform nil)))
-
-
- (defmethod initialize-instance :after ((command-frame command-frame)
- &rest initargs &key content controls)
- (with-slots (width height) command-frame
-
- ;; Initialize command-frame-form
- (assert content () "No content defined for ~a." command-frame)
- (multiple-value-bind (content-constructor content-initargs)
- (etypecase content
- (function content)
- (list (values (first content) (rest content))))
-
- (let*
- ((content-name (or (getf content-initargs :name) :content))
- (hlinks `((
- :from :command-frame-form
- :to ,content-name
- :attach-from :left
- :attach-to :left
- :maximum 0)
- (
- :from ,content-name
- :to :command-frame-form
- :attach-from :right
- :attach-to :right
- :maximum 0)
- (
- :from :command-frame-form
- :to :controls
- :attach-from :left
- :attach-to :left
- :maximum 0)
- (
- :from :controls
- :to :command-frame-form
- :attach-from :right
- :attach-to :right
- :maximum 0)))
- (vlinks `((
- :from :command-frame-form
- :to :controls
- :attach-from :top
- :attach-to :top
- :maximum 0)
- (
- :from :controls
- :to ,content-name
- :maximum 0)
- (
- :from ,content-name
- :to :command-frame-form
- :attach-from :bottom
- :attach-to :bottom
- :maximum 0)
- ))
- (form (make-form
- :name :command-frame-form
- :parent command-frame
- :width width
- :height height
- :horizontal-links hlinks
- :vertical-links vlinks)))
-
- ;; Initialize content
- (apply content-constructor
- :name content-name
- :parent form
- :max-height :infinite
- :min-height 0
- :max-width :infinite
- :min-width 0
- content-initargs)
-
- ;; Initialize controls area
- (multiple-value-bind (controls-constructor controls-initargs)
- (etypecase controls
- (null
- (let ((space (point-pixels
- (contact-screen command-frame)
- (getf *dialog-point-spacing* (contact-scale command-frame)))))
- (values 'make-table
- `(
- :columns :maximum
- :column-alignment :center
- :same-height-in-row :on
- :horizontal-space ,space
- :left-margin ,space
- :right-margin ,space
- :top-margin ,(pixel-round space 2)
- :bottom-margin ,(pixel-round space 2)))))
-
- (function controls)
-
- (list (values (first controls) (rest controls))))
-
- (apply controls-constructor
- :parent form
- :name :controls
- :border-width 0
- :max-width :infinite
- :min-width 0
- controls-initargs))))))
-
-
- (defun command-frame-form (command-frame)
- (first (slot-value command-frame 'children)))
-
- (defmethod command-frame-content ((command-frame command-frame))
- (first (slot-value (command-frame-form command-frame) 'children)))
-
- (defmethod command-frame-controls ((command-frame command-frame))
- (second (slot-value (command-frame-form command-frame) 'children)))
-
- (defun make-command-frame (&rest initargs)
- (apply #'make-contact 'command-frame initargs))
-
- (defmethod rescale :before ((command-frame command-frame))
- (let ((controls (command-frame-controls command-frame)))
- (multiple-value-bind (pw ph) (preferred-size controls)
- (declare (ignore pw))
- (setf (form-max-height controls) (setf (form-min-height controls) ph)))))
-
-